#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/syscall.h>

int main()
{
    void fun_ctrl_c();
    int i;
    sigset_t set, pendset;
    struct sigaction action;
    (void)signal(SIGINT, fun_ctrl_c);
    if (sigemptyset(&set) < 0)
    {
        //初始化信号集合
        printf("初始化信号集合错误.\n");
        exit(-1);
    }
    if (sigaddset(&set, SIGINT) < 0)
    {
        //把SIGINT信号加入集合
        printf("加入信号集合错误.\n");
        exit(-1);
    }
    if (sigprocmask(SIG_BLOCK, &set, NULL) < 0)
    {
        //把信号集合加入到当前进程的阻塞集合中
        printf("增加阻塞进程信号错误.\n");
        exit(-1);
    }
    else
    {
        for (i = 0; i < 5; i++)
        {
            printf("显示%d ： 表示程序处于阻塞信号状态.\n", i);
            sleep(2);
        }
    }
    if (sigprocmask(SIG_UNBLOCK, &set, NULL) < 0)
    {
        //从当前阻塞集合中删除一个信号集合
        printf("删除阻塞进程信号错误.\n");
        exit(-1);
    }
    return 0;
}
void fun_ctrl_c()
{
    printf("\t你按了Ctrl+C哦,是不是很长时间没理你 :)\n");
    printf("\t信号处理函数：有什么要处理在处理函数中编程!\n");
    printf("\t此例不处理，直接退出!\n");
    (void)signal(SIGINT, SIG_DFL);
}